home *** CD-ROM | disk | FTP | other *** search
/ AmigActive 10 / AACD 10.iso / AACD / Games / MAME / src / drivers / battlane.c < prev    next >
C/C++ Source or Header  |  2000-05-04  |  15KB  |  458 lines

  1. /***************************************************************************
  2.  
  3.     BattleLane
  4.     1986 Taito
  5.  
  6.     2x6809
  7.  
  8.     Driver provided by Paul Leaman (paul@vortexcomputing.demon.co.uk)
  9.  
  10. ***************************************************************************/
  11.  
  12. #include "driver.h"
  13. #include "vidhrdw/generic.h"
  14. #include "cpu/m6809/m6809.h"
  15.  
  16. extern int battlane_vh_start(void);
  17. extern void battlane_vh_stop(void);
  18. extern void battlane_vh_screenrefresh(struct osd_bitmap *bitmap,int full_refresh);
  19. extern void battlane_vh_convert_color_prom (unsigned char *palette, unsigned short *colortable,const unsigned char *color_prom);
  20.  
  21. extern unsigned char *battlane_bitmap;
  22. extern size_t battlane_bitmap_size;
  23. WRITE_HANDLER( battlane_spriteram_w );
  24. READ_HANDLER( battlane_spriteram_r );
  25. WRITE_HANDLER( battlane_tileram_w );
  26. READ_HANDLER( battlane_tileram_r );
  27. WRITE_HANDLER( battlane_bitmap_w );
  28. READ_HANDLER( battlane_bitmap_r );
  29. WRITE_HANDLER( battlane_video_ctrl_w );
  30. READ_HANDLER( battlane_video_ctrl_r );
  31. extern void battlane_set_video_flip(int);
  32.  
  33. WRITE_HANDLER( battlane_scrolly_w );
  34. WRITE_HANDLER( battlane_scrollx_w );
  35.  
  36. /* CPU interrupt control register */
  37. int battlane_cpu_control;
  38.  
  39. /* RAM shared between CPU 0 and 1 */
  40. WRITE_HANDLER( battlane_shared_ram_w )
  41. {
  42.     unsigned char *RAM =
  43.         memory_region(REGION_CPU1);
  44.     RAM[offset]=data;
  45. }
  46.  
  47. READ_HANDLER( battlane_shared_ram_r )
  48. {
  49.     unsigned char *RAM =
  50.         memory_region(REGION_CPU1);
  51.     return RAM[offset];
  52. }
  53.  
  54.  
  55. WRITE_HANDLER( battlane_cpu_command_w )
  56. {
  57.     battlane_cpu_control=data;
  58.  
  59.     /*
  60.     CPU control register
  61.  
  62.         0x80    = Video Flip
  63.         0x08    = NMI
  64.         0x04    = CPU 0 IRQ   (0=Activate)
  65.         0x02    = CPU 1 IRQ   (0=Activate)
  66.         0x01    = Scroll MSB
  67.     */
  68.  
  69.     battlane_set_video_flip(data & 0x80);
  70.  
  71.     /*
  72.         I think that the NMI is an inhibitor. It is constantly set
  73.         to zero whenever an NMIs are allowed.
  74.  
  75.         However, it could also be that setting to zero could
  76.         cause the NMI to trigger. I really don't know.
  77.     */
  78.  
  79.     /*
  80.     if (~battlane_cpu_control & 0x08)
  81.     {
  82.         cpu_set_nmi_line(0, PULSE_LINE);
  83.         cpu_set_nmi_line(1, PULSE_LINE);
  84.     }
  85.     */
  86.  
  87.     /*
  88.         CPU2's SWI will trigger an 6809 IRQ on the master by resetting 0x04
  89.         Master will respond by setting the bit back again
  90.     */
  91.     cpu_set_irq_line(0, M6809_IRQ_LINE,  data & 0x04 ? CLEAR_LINE : HOLD_LINE);
  92.  
  93.     /*
  94.     Slave function call (e.g. ROM test):
  95.     FA7F: 86 03       LDA   #$03    ; Function code
  96.     FA81: 97 6B       STA   $6B
  97.     FA83: 86 0E       LDA   #$0E
  98.     FA85: 84 FD       ANDA  #$FD    ; Trigger IRQ
  99.     FA87: 97 66       STA   $66
  100.     FA89: B7 1C 03    STA   $1C03    ; Do Trigger
  101.     FA8C: C6 40       LDB   #$40
  102.     FA8E: D5 68       BITB  $68
  103.     FA90: 27 FA       BEQ   $FA8C    ; Wait for slave IRQ pre-function dispatch
  104.     FA92: 96 68       LDA   $68
  105.     FA94: 84 01       ANDA  #$01
  106.     FA96: 27 FA       BEQ   $FA92    ; Wait for bit to be set
  107.     */
  108.  
  109.     cpu_set_irq_line(1, M6809_IRQ_LINE,   data & 0x02 ? CLEAR_LINE : HOLD_LINE);
  110. }
  111.  
  112. /* Both CPUs share the same memory */
  113.  
  114. static struct MemoryReadAddress battlane_readmem[] =
  115. {
  116.     { 0x0000, 0x0fff, battlane_shared_ram_r },
  117.     { 0x1000, 0x17ff, battlane_tileram_r },
  118.     { 0x1800, 0x18ff, battlane_spriteram_r },
  119.     { 0x1c00, 0x1c00, input_port_0_r },
  120.     { 0x1c01, 0x1c01, input_port_1_r },   /* VBLANK port */
  121.     { 0x1c02, 0x1c02, input_port_2_r },
  122.     { 0x1c03, 0x1c03, input_port_3_r },
  123.     { 0x1c04, 0x1c04, YM3526_status_port_0_r },
  124.     { 0x2000, 0x3fff, battlane_bitmap_r },
  125.     { 0x4000, 0xffff, MRA_ROM },
  126.     { -1 }  /* end of table */
  127. };
  128.  
  129. static struct MemoryWriteAddress battlane_writemem[] =
  130. {
  131.     { 0x0000, 0x0fff, battlane_shared_ram_w },
  132.     { 0x1000, 0x17ff, battlane_tileram_w },
  133.     { 0x1800, 0x18ff, battlane_spriteram_w },
  134.     { 0x1c00, 0x1c00, battlane_video_ctrl_w },
  135.     { 0x1c01, 0x1c01, battlane_scrolly_w },
  136.     { 0x1c02, 0x1c02, battlane_scrollx_w },
  137.     { 0x1c03, 0x1c03, battlane_cpu_command_w },
  138.     { 0x1c04, 0x1c04, YM3526_control_port_0_w },
  139.     { 0x1c05, 0x1c05, YM3526_write_port_0_w },
  140.     { 0x1e00, 0x1e3f, MWA_RAM }, /* Palette ??? */
  141.     { 0x2000, 0x3fff, battlane_bitmap_w, &battlane_bitmap, &battlane_bitmap_size },
  142.     { 0x4000, 0xffff, MWA_ROM },
  143.     { -1 }  /* end of table */
  144. };
  145.  
  146. int battlane_cpu1_interrupt(void)
  147. {
  148. #ifdef MAME_DEBUG
  149.     if (keyboard_pressed(KEYCODE_F))
  150.     {
  151.         FILE *fp;
  152.         while (keyboard_pressed(KEYCODE_F)) ;
  153.         fp=fopen("RAM.DMP", "w+b");
  154.         if (fp)
  155.         {
  156.             unsigned char *RAM =
  157.             memory_region(REGION_CPU1);
  158.  
  159.             fwrite(RAM, 0x4000, 1, fp);
  160.             fclose(fp);
  161.         }
  162.     }
  163. #endif
  164.  
  165.     if (cpu_getiloops()==0)
  166.     {
  167.         /* See note in battlane_cpu_command_w */
  168.         if (~battlane_cpu_control & 0x08)
  169.         {
  170.             cpu_set_nmi_line(1, PULSE_LINE);
  171.             return M6809_INT_NMI;
  172.         }
  173.         else
  174.             return ignore_interrupt();
  175.     }
  176.     else
  177.     {
  178.         /*
  179.         FIRQ seems to drive the music & coin inputs. I have no idea what it is
  180.         attached to
  181.         */
  182.         return M6809_INT_FIRQ;
  183.     }
  184. }
  185.  
  186. int battlane_cpu2_interrupt(void)
  187. {
  188.     /* CPU2's interrupts are generated on-demand by CPU1 */
  189.     return ignore_interrupt();
  190. }
  191.  
  192.  
  193. INPUT_PORTS_START( battlane )
  194.     PORT_START      /* IN0 */
  195.     PORT_BIT( 0x01, IP_ACTIVE_LOW, IPT_BUTTON1 )
  196.     PORT_BIT( 0x02, IP_ACTIVE_LOW, IPT_BUTTON2 )
  197.     PORT_BIT( 0x04, IP_ACTIVE_LOW, IPT_JOYSTICK_DOWN  | IPF_8WAY )
  198.     PORT_BIT( 0x08, IP_ACTIVE_LOW, IPT_JOYSTICK_UP    | IPF_8WAY )
  199.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_JOYSTICK_LEFT  | IPF_8WAY )
  200.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_JOYSTICK_RIGHT | IPF_8WAY )
  201.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_START1 )
  202.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_START2 )
  203.  
  204.     PORT_START      /* IN1 */
  205.     PORT_BIT( 0x7f, IP_ACTIVE_LOW, IPT_UNUSED )     /* Unused bits */
  206.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_VBLANK )     /* VBLank ? */
  207.  
  208.     PORT_START      /* DSW1 */
  209.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Coin_B ) )
  210.     PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
  211.     PORT_DIPSETTING(    0x03, DEF_STR( 1C_1C )  )
  212.     PORT_DIPSETTING(    0x02, DEF_STR( 1C_2C ) )
  213.     PORT_DIPSETTING(    0x01, DEF_STR( 1C_3C ) )
  214.     PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Coin_A ) )
  215.     PORT_DIPSETTING(    0x00, DEF_STR( 2C_1C ) )
  216.     PORT_DIPSETTING(    0x0c, DEF_STR( 1C_1C ) )
  217.     PORT_DIPSETTING(    0x08, DEF_STR( 1C_2C ) )
  218.     PORT_DIPSETTING(    0x04, DEF_STR( 1C_3C ) )
  219.     PORT_DIPNAME( 0x10, 0x10, DEF_STR( Demo_Sounds ) )
  220.     PORT_DIPSETTING(    0x00, DEF_STR( Off ) )
  221.     PORT_DIPSETTING(    0x10, DEF_STR( On ) )
  222.     PORT_DIPNAME( 0x20, 0x00, DEF_STR( Cabinet ) )
  223.     PORT_DIPSETTING(    0x00, DEF_STR( Upright ) )
  224.     PORT_DIPSETTING(    0x20, DEF_STR( Cocktail ) )
  225.     PORT_DIPNAME( 0xc0, 0x80, DEF_STR( Difficulty ) )
  226.     PORT_DIPSETTING(    0xc0, "Easy"  )
  227.     PORT_DIPSETTING(    0x80, "Normal" )
  228.     PORT_DIPSETTING(    0x40, "Hard"  )
  229.     PORT_DIPSETTING(    0x00, "Very Hard" )
  230.  
  231.     PORT_START      /* DSW2 */
  232.     PORT_DIPNAME( 0x03, 0x03, DEF_STR( Lives ) )
  233.     PORT_DIPSETTING(    0x03, "3" )
  234.     PORT_DIPSETTING(    0x02, "4" )
  235.     PORT_DIPSETTING(    0x01, "5" )
  236.     PORT_BITX(0,        0x00, IPT_DIPSWITCH_SETTING | IPF_CHEAT, "Infinite", IP_KEY_NONE, IP_JOY_NONE )
  237.     PORT_DIPNAME( 0x0c, 0x0c, DEF_STR( Bonus_Life ) )
  238.     PORT_DIPSETTING(    0x0c, "20k & every 50k" )
  239.     PORT_DIPSETTING(    0x08, "20k & every 70k" )
  240.     PORT_DIPSETTING(    0x04, "20k & every 90k" )
  241.     PORT_DIPSETTING(    0x00, "None" )
  242.     PORT_BIT( 0x10, IP_ACTIVE_LOW, IPT_UNKNOWN )
  243.     PORT_BIT( 0x20, IP_ACTIVE_LOW, IPT_COIN1 )
  244.     PORT_BIT( 0x40, IP_ACTIVE_LOW, IPT_COIN2 )
  245.     PORT_BIT( 0x80, IP_ACTIVE_LOW, IPT_COIN3 )
  246. INPUT_PORTS_END
  247.  
  248. static struct GfxLayout spritelayout =
  249. {
  250.     16,16,  /* 16*16 sprites */
  251.     0x0400,    /* 0x400 sprites */
  252.     6,      /* 6 bits per pixel ??!!! */
  253.     { 0, 8, 0x08000*8,0x08000*8+8, 0x10000*8, 0x10000*8+8},
  254.     {
  255.         7, 6, 5, 4, 3, 2, 1, 0,
  256.       16*8+7, 16*8+6, 16*8+5, 16*8+4, 16*8+3, 16*8+2, 16*8+1, 16*8+0,
  257.     },
  258.     {
  259.         14*8,14*8,13*8,12*8,11*8,10*8,9*8,8*8,
  260.         7*8, 6*8, 5*8, 4*8, 3*8, 2*8, 1*8, 0*8,
  261.     },
  262.     16*8*2     /* every char takes 16*8*2 consecutive bytes */
  263. };
  264.  
  265. static struct GfxLayout tilelayout =
  266. {
  267.     16,16 ,    /* 16*16 tiles */
  268.     256,    /* 256 tiles */
  269.     3,      /* 3 bits per pixel */
  270.     {   4, 0, 0x8000*8+4 },    /* plane offset */
  271.     {
  272.     16+8+0, 16+8+1, 16+8+2, 16+8+3,
  273.     16+0, 16+1, 16+2,   16+3,
  274.     8+0,    8+1,    8+2,    8+3,
  275.     0,       1,    2,      3,
  276.     },
  277.     { 0*8*4, 1*8*4,  2*8*4,  3*8*4,  4*8*4,  5*8*4,  6*8*4,  7*8*4,
  278.       8*8*4, 9*8*4, 10*8*4, 11*8*4, 12*8*4, 13*8*4, 14*8*4, 15*8*4
  279.     },
  280.     8*8*4*2     /* every char takes consecutive bytes */
  281. };
  282.  
  283. static struct GfxLayout tilelayout2 =
  284. {
  285.     16,16 ,    /* 16*16 tiles */
  286.     256,    /* 256 tiles */
  287.     3,      /* 3 bits per pixel */
  288.     { 0x4000*8+4, 0x8000*8, 0x4000*8+0, },    /* plane offset */
  289.     {
  290.     16+8+0, 16+8+1, 16+8+2, 16+8+3,
  291.     16+0, 16+1, 16+2,   16+3,
  292.     8+0,    8+1,    8+2,    8+3,
  293.     0,       1,    2,      3,
  294.     },
  295.     { 0*8*4, 1*8*4,  2*8*4,  3*8*4,  4*8*4,  5*8*4,  6*8*4,  7*8*4,
  296.       8*8*4, 9*8*4, 10*8*4, 11*8*4, 12*8*4, 13*8*4, 14*8*4, 15*8*4
  297.     },
  298.     8*8*4*2     /* every char takes consecutive bytes */
  299. };
  300.  
  301.  
  302. static struct GfxDecodeInfo gfxdecodeinfo[] =
  303. {
  304.     { REGION_GFX1, 0, &spritelayout, 0, 32},
  305.     { REGION_GFX2, 0, &tilelayout,   0, 32},
  306.     { REGION_GFX2, 0, &tilelayout2,  0, 32},
  307.     { -1 } /* end of array */
  308. };
  309.  
  310. static struct YM3526interface ym3526_interface =
  311. {
  312.     1,              /* 1 chip (no more supported) */
  313.     3600000,        /* 3.600000 MHz ? (partially supported) */
  314.     { 255 }         /* (not supported) */
  315. };
  316.  
  317.  
  318. static struct MachineDriver machine_driver_battlane =
  319. {
  320.     /* basic machine hardware */
  321.     {
  322.         {
  323.             CPU_M6809,
  324.             1250000,        /* 1.25 Mhz ? */
  325.             battlane_readmem, battlane_writemem,0,0,
  326.             battlane_cpu1_interrupt,2
  327.         },
  328.         {
  329.             CPU_M6809,
  330.             1250000,        /* 1.25 Mhz ? */
  331.             battlane_readmem, battlane_writemem,0,0,
  332.             battlane_cpu2_interrupt,1
  333.         }
  334.     },
  335.     60, DEFAULT_REAL_60HZ_VBLANK_DURATION,  /* frames per second, vblank duration */
  336.     0,      /* CPU slices per frame */
  337.     0,      /* init machine */
  338.  
  339.     /* video hardware */
  340.     32*8, 32*8, { 1*8, 31*8-1, 1*8, 31*8-1 },       /* not sure */
  341.     gfxdecodeinfo,
  342.     0x40,0x40,
  343.     NULL, //battlane_vh_convert_color_prom,
  344.  
  345.     VIDEO_TYPE_RASTER |VIDEO_MODIFIES_PALETTE,
  346.     0 ,
  347.     battlane_vh_start,
  348.     battlane_vh_stop,
  349.     battlane_vh_screenrefresh,
  350.  
  351.     /* sound hardware */
  352.     0,0,0,0,
  353.     {
  354.         {
  355.             SOUND_YM3526,
  356.             &ym3526_interface,
  357.         }
  358.     }
  359. };
  360.  
  361.  
  362. /***************************************************************************
  363.  
  364.   Game driver(s)
  365.  
  366. ***************************************************************************/
  367.  
  368. ROM_START( battlane )
  369.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for main CPU */
  370.     /* first half of da00-5 will be copied at 0x4000-0x7fff */
  371.     ROM_LOAD( "da01-5",    0x8000, 0x8000, 0x7a6c3f02 )
  372.  
  373.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64K for slave CPU */
  374.     ROM_LOAD( "da00-5",    0x00000, 0x8000, 0x85b4ed73 )    /* ...second half goes here */
  375.     ROM_LOAD( "da02-2",    0x08000, 0x8000, 0x69d8dafe )
  376.  
  377.     ROM_REGION( 0x18000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  378.     ROM_LOAD( "da05",      0x00000, 0x8000, 0x834829d4 ) /* Sprites Plane 1+2 */
  379.     ROM_LOAD( "da04",      0x08000, 0x8000, 0xf083fd4c ) /* Sprites Plane 3+4 */
  380.     ROM_LOAD( "da03",      0x10000, 0x8000, 0xcf187f25 ) /* Sprites Plane 5+6 */
  381.  
  382.     ROM_REGION( 0x0c000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  383.     ROM_LOAD( "da06",      0x00000, 0x8000, 0x9c6a51b3 ) /* Tiles*/
  384.     ROM_LOAD( "da07",      0x08000, 0x4000, 0x56df4077 ) /* Tiles*/
  385.  
  386.     ROM_REGION( 0x0040, REGION_PROMS )
  387.     ROM_LOAD( "82s123.7h", 0x00000, 0x0020, 0xb9933663 )    /* palette? */
  388.     ROM_LOAD( "82s123.9n", 0x00020, 0x0020, 0x06491e53 )    /* palette? */
  389. ROM_END
  390.  
  391. ROM_START( battlan2 )
  392.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for main CPU */
  393.     /* first half of da00-3 will be copied at 0x4000-0x7fff */
  394.     ROM_LOAD( "da01-3",    0x8000, 0x8000, 0xd9e40800 )
  395.  
  396.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64K for slave CPU */
  397.     ROM_LOAD( "da00-3",    0x00000, 0x8000, 0x7a0a5d58 )    /* ...second half goes here */
  398.     ROM_LOAD( "da02-2",    0x08000, 0x8000, 0x69d8dafe )
  399.  
  400.     ROM_REGION( 0x18000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  401.     ROM_LOAD( "da05",      0x00000, 0x8000, 0x834829d4 ) /* Sprites Plane 1+2 */
  402.     ROM_LOAD( "da04",      0x08000, 0x8000, 0xf083fd4c ) /* Sprites Plane 3+4 */
  403.     ROM_LOAD( "da03",      0x10000, 0x8000, 0xcf187f25 ) /* Sprites Plane 5+6 */
  404.  
  405.     ROM_REGION( 0x0c000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  406.     ROM_LOAD( "da06",      0x00000, 0x8000, 0x9c6a51b3 ) /* Tiles*/
  407.     ROM_LOAD( "da07",      0x08000, 0x4000, 0x56df4077 ) /* Tiles*/
  408.  
  409.     ROM_REGION( 0x0040, REGION_PROMS )
  410.     ROM_LOAD( "82s123.7h", 0x00000, 0x0020, 0xb9933663 )    /* palette? */
  411.     ROM_LOAD( "82s123.9n", 0x00020, 0x0020, 0x06491e53 )    /* palette? */
  412. ROM_END
  413.  
  414. ROM_START( battlan3 )
  415.     ROM_REGION( 0x10000, REGION_CPU1 )     /* 64k for main CPU */
  416.     /* first half of bl_04.rom will be copied at 0x4000-0x7fff */
  417.     ROM_LOAD( "bl_05.rom", 0x8000, 0x8000, 0x001c4bbe )
  418.  
  419.     ROM_REGION( 0x10000, REGION_CPU2 )     /* 64K for slave CPU */
  420.     ROM_LOAD( "bl_04.rom", 0x00000, 0x8000, 0x5681564c )    /* ...second half goes here */
  421.     ROM_LOAD( "da02-2",    0x08000, 0x8000, 0x69d8dafe )
  422.  
  423.     ROM_REGION( 0x18000, REGION_GFX1 | REGIONFLAG_DISPOSE )
  424.     ROM_LOAD( "da05",      0x00000, 0x8000, 0x834829d4 ) /* Sprites Plane 1+2 */
  425.     ROM_LOAD( "da04",      0x08000, 0x8000, 0xf083fd4c ) /* Sprites Plane 3+4 */
  426.     ROM_LOAD( "da03",      0x10000, 0x8000, 0xcf187f25 ) /* Sprites Plane 5+6 */
  427.  
  428.     ROM_REGION( 0x0c000, REGION_GFX2 | REGIONFLAG_DISPOSE )
  429.     ROM_LOAD( "da06",      0x00000, 0x8000, 0x9c6a51b3 ) /* Tiles*/
  430.     ROM_LOAD( "da07",      0x08000, 0x4000, 0x56df4077 ) /* Tiles*/
  431.  
  432.     ROM_REGION( 0x0040, REGION_PROMS )
  433.     ROM_LOAD( "82s123.7h", 0x00000, 0x0020, 0xb9933663 )    /* palette? */
  434.     ROM_LOAD( "82s123.9n", 0x00020, 0x0020, 0x06491e53 )    /* palette? */
  435. ROM_END
  436.  
  437.  
  438.  
  439. static void init_battlane(void)
  440. {
  441.     unsigned char *src,*dest;
  442.     int A;
  443.  
  444.     /* no encryption, but one ROM is shared among two CPUs. We loaded it into the */
  445.     /* second CPU address space, let's copy it to the first CPU's one */
  446.     src = memory_region(REGION_CPU2);
  447.     dest = memory_region(REGION_CPU1);
  448.  
  449.     for(A = 0;A < 0x4000;A++)
  450.         dest[A + 0x4000] = src[A];
  451. }
  452.  
  453.  
  454.  
  455. GAMEX( 1986, battlane, 0,        battlane, battlane, battlane, ROT90, "Technos (Taito license)", "Battle Lane Vol. 5 (set 1)", GAME_WRONG_COLORS | GAME_NO_COCKTAIL )
  456. GAMEX( 1986, battlan2, battlane, battlane, battlane, battlane, ROT90, "Technos (Taito license)", "Battle Lane Vol. 5 (set 2)", GAME_WRONG_COLORS | GAME_NO_COCKTAIL )
  457. GAMEX( 1986, battlan3, battlane, battlane, battlane, battlane, ROT90, "Technos (Taito license)", "Battle Lane Vol. 5 (set 3)", GAME_WRONG_COLORS | GAME_NO_COCKTAIL )
  458.